﻿// ------------------------------------------------------------------------
// 版权信息
// 版权归百小僧及百签科技（广东）有限公司所有。
// 所有权利保留。
// 官方网站：https://baiqian.com
//
// 许可证信息
// Furion 项目主要遵循 MIT 许可证和 Apache 许可证（版本 2.0）进行分发和使用。
// 许可证的完整文本可以在源代码树根目录中的 LICENSE-APACHE 和 LICENSE-MIT 文件中找到。
// 官方网站：https://furion.net
//
// 使用条款
// 使用本代码应遵守相关法律法规和许可证的要求。
//
// 免责声明
// 对于因使用本代码而产生的任何直接、间接、偶然、特殊或后果性损害，我们不承担任何责任。
//
// 其他重要信息
// Furion 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。
// 有关 Furion 项目的其他详细信息，请参阅位于源代码树根目录中的 COPYRIGHT 和 DISCLAIMER 文件。
//
// 更多信息
// 请访问 https://gitee.com/dotnetchina/Furion 获取更多关于 Furion 项目的许可证和版权信息。
// ------------------------------------------------------------------------

using System.Reflection;

namespace Furion.DatabaseAccessor;

/// <summary>
/// 数据库上下文关联类型
/// </summary>
internal sealed class DbContextCorrelationType
{
    /// <summary>
    /// 构造函数
    /// </summary>
    internal DbContextCorrelationType()
    {
        EntityTypes = new List<Type>();
        EntityNoKeyTypes = new List<Type>();
        EntityTypeBuilderTypes = new List<Type>();
        EntitySeedDataTypes = new List<Type>();
        EntityChangedTypes = new List<Type>();
        ModelBuilderFilterTypes = new List<Type>();
        EntityMutableTableTypes = new List<Type>();
        ModelBuilderFilterInstances = new List<IPrivateModelBuilderFilter>();
        DbFunctionMethods = new List<MethodInfo>();
    }

    /// <summary>
    /// 关联的数据库上下文
    /// </summary>
    internal Type DbContextLocator { get; set; }

    /// <summary>
    /// 所有关联类型
    /// </summary>
    internal List<Type> Types { get; set; }

    /// <summary>
    /// 实体类型集合
    /// </summary>
    internal List<Type> EntityTypes { get; set; }

    /// <summary>
    /// 无键实体类型集合
    /// </summary>
    internal List<Type> EntityNoKeyTypes { get; set; }

    /// <summary>
    /// 实体构建器类型集合
    /// </summary>
    internal List<Type> EntityTypeBuilderTypes { get; set; }

    /// <summary>
    /// 种子数据类型集合
    /// </summary>
    internal List<Type> EntitySeedDataTypes { get; set; }

    /// <summary>
    /// 实体数据改变类型
    /// </summary>
    internal List<Type> EntityChangedTypes { get; set; }

    /// <summary>
    /// 模型构建筛选器类型集合
    /// </summary>
    internal List<Type> ModelBuilderFilterTypes { get; set; }

    /// <summary>
    /// 可变表实体类型集合
    /// </summary>
    internal List<Type> EntityMutableTableTypes { get; set; }

    /// <summary>
    /// 数据库函数方法集合
    /// </summary>
    internal List<MethodInfo> DbFunctionMethods { get; set; }

    /// <summary>
    /// 模型构建器筛选器实例
    /// </summary>
    internal List<IPrivateModelBuilderFilter> ModelBuilderFilterInstances { get; set; }
}